package cn.com.yusys.yusp.admin.service;

import cn.com.yusys.yusp.admin.domain.AdminSmFuncMod;
import cn.com.yusys.yusp.admin.repository.mapper.AdminSmBusiFuncMapper;
import cn.com.yusys.yusp.admin.repository.mapper.AdminSmFuncModMapper;
import cn.com.yusys.yusp.commons.exception.MessageConstants;
import cn.com.yusys.yusp.commons.exception.YuspException;
import cn.com.yusys.yusp.commons.mapper.CommonMapper;
import cn.com.yusys.yusp.commons.mapper.QueryModel;
import cn.com.yusys.yusp.commons.service.CommonService;
import cn.com.yusys.yusp.commons.util.DateUtil;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @项目名称: yusp-admin
 * @类名称: AdminSmFuncModService
 * @类描述: 模块管理服务层
 * @功能描述:
 * @创建人: weimei1@yusys.com.cn
 * @创建时间: 2017-12-16 18:33
 * @修改备注:
 * @修改记录: 修改时间 修改人员 修改原因
 *        -------------------------------------------------------------
 * @version 1.0.0
 * @Copyright (c) 2018宇信科技-版权所有
 */
@Service
public class AdminSmFuncModService extends CommonService {

	@Autowired
	private AdminSmFuncModMapper adminSmFuncModMapper;

	@Autowired
	private AdminSmBusiFuncMapper adminSmBusiFuncMapper;

    @Autowired
    private MessageProviderService messageProviderService;

	@Override
	protected CommonMapper<AdminSmFuncMod> getMapper() {
		return this.adminSmFuncModMapper;
	}

	/**
	 * @方法名称: getModInfo
	 * @方法描述: 查询模块信息
	 * @参数与返回说明:
	 * @算法描述:
	 */
	@Transactional(readOnly = true)
	public List<Map<String, Object>> getModInfo(QueryModel model) {
		PageHelper.startPage(model.getPage(), model.getSize());
		if (model.getCondition().containsKey("modName")) {
			model.getCondition().put("modName", "%" + model.getCondition().get("modName") + "%");
		}
		List<Map<String, Object>> list = this.adminSmFuncModMapper.getModInfo(model);
		PageHelper.clearPage();
		return list;
	}

	/**
	 * @方法名称: createMod
	 * @方法描述: 新增模块信息
	 * @参数与返回说明:
	 * @算法描述:
	 */
	public int createMod(AdminSmFuncMod adminSmFuncMod) {
		adminSmFuncMod.setLastChgDt(DateUtil.formatDateTimeByDef());
		return this.insertSelective(adminSmFuncModMapper, adminSmFuncMod);
	}

	/**
	 * @方法名称: editMod
	 * @方法描述: 修改模块信息
	 * @参数与返回说明:
	 * @算法描述:
	 */
	public int editMod(AdminSmFuncMod adminSmFuncMod) {
		adminSmFuncMod.setLastChgDt(DateUtil.formatDateTimeByDef());
		return this.updateSelective(adminSmFuncModMapper, adminSmFuncMod);
	}

    /**
     * @方法名称: deleteMod
     * @方法描述: 删除模块信息，如模块已关联业务功能，不允许删除
     * @参数与返回说明:
     * @算法描述:
     */
    @Transactional(readOnly = false, rollbackFor = {Exception.class, RuntimeException.class})
	public int deleteMod(String modId){
	    int n=0;
        if(modId!=null&&!modId.equals("")){
            int unDelete = adminSmBusiFuncMapper.getFuncByModId(modId);
            if(unDelete!=0){
                throw new YuspException(messageProviderService.getMessage(String.valueOf(MessageConstants.RET_CODE_20100010)));
            }else{
                n = n + this.adminSmFuncModMapper.deleteByPrimaryKey(modId);
            }
        }
        return n;
    }

	/**
	 * @方法名称: checkName
	 * @方法描述: 保存数据前查询模块名称是否已经存在
	 * @参数与返回说明:
	 * @算法描述:
	 */
	@Transactional(readOnly = true)
	public List<Map<String,Object>> checkName(String modName,String modId){
		Map<String,Object> params = new HashMap<>();
		params.put("modName",modName);
		params.put("modId",modId);
		return adminSmFuncModMapper.checkName(params);
	}
}
